#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main() {

  // C接口
  printf("hello world\n");
  fprintf(stdout,"hello fprintf\n");

  const char *msg = "hello puts";

  fputs(msg,stdout);

  // 系统接口
  
  const char *wstring = "hello write\n";
  write(1,wstring,strlen(wstring));


  //代码结束之前，我们进行了创建子进程的操作
  //1. 如果我们没有进行 > xxx.txt 的操作，我们会在显示器上看到4条信息
  // 因为stdout默认使用的是行刷新，在进程fork之前，三条C函数已经将数据打印输出到显示器上(外设)，你的FILE内部，进程内部就已经不存在对应的数据
  //2. 如果我们进行了 > xxx.txt 的操作，写入文件就不再是显示器，而是普通文件，采用的刷新策略是全缓冲，之前的3条c函数，虽然带了\n，但是不足以stdout写满，数据并没有被刷新
  //当我们执行了fork()之后，stdout就属于父进程，创建子进程时，紧接着就是进程退出，谁先退出，一定要进行刷新缓冲区的操作（就是修改）
  //写时拷贝，数据最终会显示两份
  //3. write为什么没有呢？上面的过程都和write无关，write没有FILE，而用的是fd，就没有C提供的缓冲区


  fork(); 

  return 0;
}
